﻿using System.IO;
using Styx;
using Styx.Helpers;
using System.ComponentModel;
using DefaultValue = Styx.Helpers.DefaultValueAttribute;
using Styx.Common;
using Styx.Common.Helpers;
using System.Windows.Forms;
using System.Reflection;

namespace KingWoW
{
    [Obfuscation(Exclude = true)] 
    public class DiscPriestSettings : Settings
    {
        public static DiscPriestSettings Instance = new DiscPriestSettings();


        public string path_name = Path.Combine(Styx.Common.Utilities.AssemblyDirectory, string.Format(@"KingWOWCurrentSettings/DiscPriest/DiscPriest-Settings-{0}.xml", StyxWoW.Me.SafeName));

        public DiscPriestSettings()
            : base(Path.Combine(Styx.Common.Utilities.AssemblyDirectory, string.Format(@"KingWOWCurrentSettings/DiscPriest/DiscPriest-Settings-{0}.xml", StyxWoW.Me.SafeName)))
        {
        }

        [Setting]
        [DefaultValue(20)]
        [Category("SAVING GRACE")]
        [DisplayName("SavingGraceHP")]
        [Description("Will cast Saving Grace if talented if target to heal hp lower than this value and if number of debuff stack lower than SavinGraceDebuffStackNumber")]
        public int SavingGraceHP { get; set; }

        [Setting]
        [DefaultValue(0)]
        [Category("SAVING GRACE")]
        [DisplayName("SavinGraceDebuffStackNumber")]
        [Description("Will cast Saving Grace if talented if target to heal hp lower than SavingGraceHP and if number of debuff stack lower than this value")]
        public int SavinGraceDebuffStackNumber { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("CLARITY OF WILL")]
        [DisplayName("Use Clarity of Will")]
        [Description("Enable/Disable use of Clarity of Will")]
        public bool UseClarityOfWill { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("CLARITY OF WILL")]
        [DisplayName("ClarityOfWill ONLY on Tanks")]
        [Description("Use of Clarity of Will only on tanks")]
        public bool UseClarityOfWillOnlyOnTanks { get; set; }

        [Setting]
        [DefaultValue(40)]
        [Category("CLARITY OF WILL")]
        [DisplayName("ClarityOfWill MANA")]
        [Description("Use of Clarity of Will if my mana percentage greater than this value")]
        public int ClarityOfWillMana { get; set; }

        [Setting]
        [DefaultValue(100)]
        [Category("CLARITY OF WILL")]
        [DisplayName("ClarityOfWillTanksHP")]
        [Description("Use of Clarity of Will on tank/offTank if his hp lower than this value")]
        public int ClarityOfWillTanksHP { get; set; }

        [Setting]
        [DefaultValue(60)]
        [Category("CLARITY OF WILL")]
        [DisplayName("ClarityOfWillOtherHP")]
        [Description("Use of Clarity of Will on other party members if their hp lower than this value")]
        public int ClarityOfWillOtherHP { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("MOVEMENT")]
        [DisplayName("Auto Move")]
        [Description("Enable/disable CC movement")]
        public bool movementEnabled { get; set; }

        [Setting]
        [DefaultValue(4)]
        [Category("AOE DPS")]
        [DisplayName("Use Mind Sear EnemyNumberMin")]
        [Description("Use Mind Sear if enemies around Tank or OffTank > this value")]
        public int MindSearEnemyNumberMin { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("INTERRUPT")]
        [DisplayName("autointerrupt")]
        [Description("Cast silence if AttackTarget casting and interrumpible")]
        public bool AutoInterrupt { get; set; }

        [Setting]
        [DefaultValue(200)]
        [Category("INTERRUPT")]
        [DisplayName("Interrupt_MIN_Time")]
        [Description("Interrupt if enemy cast time between Interrupt_MIN_Time and Interrupt_MAX_Time")]
        public int Interrupt_MIN_Time { get; set; }

        [Setting]
        [DefaultValue(300)]
        [Category("INTERRUPT")]
        [DisplayName("Interrupt_MAX_Time")]
        [Description("Interrupt if enemy cast time between Interrupt_MIN_Time and Interrupt_MAX_Time")]
        public int Interrupt_MAX_Time { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("AOE DPS")]
        [DisplayName("Use Mind Sear")]
        [Description("Enable/Disable use of MindSear")]
        public bool UseMindSear { get; set; }

        [Setting]
        [DefaultValue(2)]
        [Category("MULTIDOT")]
        [DisplayName("Multidot_SW_Pain_EnemyNumberMin")]
        [Description("Enable Multidot of ShadowWord: Pain rotation if Enemy in range withouut this dot >= this value")]
        public int Multidot_SW_Pain_EnemyNumberMin { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("MOVEMENT")]
        [DisplayName("AutoFacingTarget")]
        [Description("Enable/Disable autofacing current AttackTarget")]
        public bool AutofaceTarget { get; set; }

        [Setting]
        [DefaultValue(4)]
        [Category("MULTIDOT")]
        [DisplayName("Multidot_SW_Pain_EnemyNumberMax")]
        [Description("Disable Multidot rotation if dotted Enemy with ShadowWors: Pain> this value")]
        public int Multidot_SW_Pain_EnemyNumberMax { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("MULTIDOT")]
        [DisplayName("Enable Multidot Rotation")]
        [Description("Enable/Disable use of Multidot rotation")]
        public bool MultidotEnabled { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("MULTIDOT")]
        [DisplayName("Avoid Crowd Controlled in Multidot Rotation")]
        [Description("Avoid Crowd Controlled in Multidot Rotation")]
        public bool MultidotAvoidCC { get; set; }


        [Setting]
        [DefaultValue(28)]
        [Category("PULL")]
        [DisplayName("PullDistance")]
        [Description("Distance to pull from")]
        public float PullDistance { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("PULL")]
        [DisplayName("fastPull")]
        [Description("fastPull: avoid prebuff")]
        public bool fastPull { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("SELF HEALING")]
        [DisplayName("Enabled Self Healing Priority")]
        [Description("Enable/Disable Self Healing Priority: HP% is set below")]
        public bool SelfHealingPriorityEnabled { get; set; }

        [Setting]
        [DefaultValue(50)]
        [Category("SELF HEALING")]
        [DisplayName("SelfHealingPriorityHP")]
        [Description("if enabled Self Healing Priority: healing you before other in party until below this HP%")]
        public float SelfHealingPriorityHP { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("CD")]
        [DisplayName("Use Archangel")]
        [Description("Cast Archangel at 5 stacks of evangelism")]
        public bool UseArchangel { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("ROTATION")]
        [DisplayName("UseDisciplineAtonementHealingRotation")]
        [Description("if NOT AutoSwitchAtonementNormal setting enabled then Manual switch between Atonement and Normal healing ")]
        public bool UseDisciplineAtonementHealingRotation { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("ROTATION")]
        [DisplayName("AtonementOnlyForArchangel")]
        [Description("try use athonement only for archangel")]
        public bool AtonementOnlyForArchangel { get; set; }

        /*[Setting]
        [DefaultValue(false)]
        [Category("ROTATION")]
        [DisplayName("HelpDPS")]
        [Description("Help dps if no need healing (low priority!) IMPORTANT: This settings overrided any penance setting because will use penance for dps too")]
        public bool HelpDPS { get; set; }*/
        
        
        

        [Setting]
        [DefaultValue(Rotation.PVE)]
        [Category("ROTATION")]
        [DisplayName("Rotation Type")]
        [Description("use PVE or PVP or QUESTING rotation tipe")]
        public Rotation RotationType { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("ROTATION")]
        [DisplayName("Auto switch Atonement/Normal healing")]
        [Description("Automatic switch between Atonement and Normal healing (use Normal healing when there is nothing to attack)")]
        public bool AutoSwitchAtonementNormal { get; set; }

        public enum Rotation
        {
            PVE,
            PVP,
            QUESTING
        }

        [Setting]
        [DefaultValue(true)]
        [Category("BUFF")]
        [DisplayName("Auto PW:Fortitude")]
        [Description("Cast Automaticaly PW:Fortitude on party")]
        public bool AutoPWFortitude { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("PRAYER OF MENDING")]
        [DisplayName("Use Preyer of Mending")]
        [Description("Enable/Disable Preyer of Mending")]
        public bool Use_PoM { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("PRAYER OF MENDING")]
        [DisplayName("Use Preyer of Mending Only On Tank")]
        [Description("Use Preyer of Mending Only On Tank")]
        public bool Use_PoM_Only_On_Tank { get; set; }

        [Setting]
        [DefaultValue(100)]
        [Category("PRAYER OF MENDING")]
        [DisplayName("Preyer of Mending at HP%")]
        [Description("Use Preyer of Mending on this HP percentage")]
        public int PoM_HP { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("MOVEMENT")]
        [DisplayName("Use talent for speed on moving")]
        [Description("chose to use AngelicFaether/PW:Shield if talented and if moving in combat or when MoveTimeForSpeedBuff condition OutOfCombat is verified")]
        public bool BurstSpeedMoving { get; set; }

        [Setting]
        [DefaultValue(500)]
        [Category("MOVEMENT")]
        [DisplayName("MoveTimeForSpeedBuff")]
        [Description("If OutOfCombat will cast movement spell buff if you move without changing direction for a time greater than this value in Milliseconds")]
        public int MoveTimeForSpeedBuff { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("BUFF")]
        [DisplayName("Use Fade")]
        [Description("chose to use fade on aggro")]
        public bool UseFade { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("DISPELLS")]
        [DisplayName("Use Purify ")]
        [Description("Use Purify for cure disease and dispell magic")]
        public bool UsePurify { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("BUFF")]
        [DisplayName("Try to Mantain Borrowed Time")]
        [Description("Try to Mantain Borrowed Time casting if possible PWS to best friendly target")]
        public bool MantainBorrowedTime { get; set; }
        

        [Setting]
        [DefaultValue(true)]
        [Category("DISPELLS")]
        [DisplayName("UseMassDispell ")]
        [Description("Use MassDispell for cure disease and dispell magic on many players")]
        public bool UseMassDispell { get; set; }

        [Setting]
        [DefaultValue(3)]
        [Category("DISPELLS")]
        [DisplayName("Mass Dispell Count")]
        [Description("Set number of dispellable players for Mass Dispell")]
        public int MassDispellCount { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("SPECIAL")]
        [DisplayName("Use Resurrection")]
        [Description("enable use of Resurrection out of combat")]
        public bool UseResurrection { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("NPC_HEALING")]
        [DisplayName("HealNPC")]
        [Description("Enable/Disable heal on NPC (enable in provinGround or in some specific encounter when you need to heal Unit that are not in your party/raid")]
        public bool HealNPC { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("NPC_HEALING")]
        [DisplayName("FullHealSelectedNPC")]
        [Description("when HealNPC is selected if you enable this option then CR will try to full the selected friendly NPC you target")]
        public bool FullSelectedNPC { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("SPECIAL")]
        [DisplayName("AutoDismountOnCombat")]
        [Description("Auto start combat rotation when in combat and mounted")]
        public bool AutoDismountOnCombat { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("SPECIAL")]
        [DisplayName("Show Message healing autoswitch")]
        [Description("Show a chat Message when healing autoswitch from atonement to rormal and viceversa")]
        public bool ShowMessageSwitching { get; set; }        

        [Setting]
        [DefaultValue(true)]
        [Category("SPECIAL")]
        [DisplayName("use OOC healing")]
        [Description("enable-disable use of OutOfCombat healing")]
        public bool OOCHealing { get; set; }
        

        [Setting]
        [DefaultValue(false)]
        [Category("BUFF")]
        [DisplayName("Use Fear Ward")]
        [Description("enable use of Fear Ward on CD")]
        public bool UseFearWard { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("DAMAGE REDUCTION")]
        [DisplayName("Auto use Pain Suppression")]
        [Description("enable use of Pain Suppression")]
        public bool UsePainSuppression { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("TANK")]
        [DisplayName("Use Pain Suppression ONLY on TANK")]
        [Description("enable use of Pain Suppression ONLY on TANK or on you when in solo")]
        public bool UsePainSuppressionOnlyOnTank { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("OFF_TANK")]
        [DisplayName("Use Pain Suppression on OFF_TANK too")]
        [Description("enable use of Pain Suppression on OFF_TANK or on you when in solo")]
        public bool UsePainSuppressionOnOffTank { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("OFF_TANK")]
        [DisplayName("Use OFF_TANK healing")]
        [Description("enable/disable OffTank Healing priority (same features of main tank except keep grace) but main tank will be always first")]
        public bool OffTankHealing { get; set; }
        

        [Setting]
        [DefaultValue(50)]
        [Category("DAMAGE REDUCTION")]
        [DisplayName("Pain Suppression hp%")]
        [Description("Cast Pain Suppression at AttackTarget % hp")]
        public int PainSuppressionPercent { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("DAMAGE REDUCTION")]
        [DisplayName("Use_SS_on_POM")]
        [Description("Use Spirit Shell everytime I'm going to use Prayer Of Healing")]
        public bool UseSS_on_POM { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("TANK")]
        [DisplayName("Priorize Tank Healing")]
        [Description("Priorize Tank healing over all except an SoS heal")]
        public bool PriorizeTankHealing { get; set; }
        
        
        [Setting]
        [DefaultValue(75)]
        [Category("MANA REGENERATION")]
        [DisplayName("ShadowFiend/Mindbender mana%")]
        [Description("Cast ShadowFiend/Mindbender at % mana")]
        public int ShadowFiendPercent { get; set; }

        public enum CDUseType
        {
            COOLDOWN,
            BOSS,
            MANUAL
        }

        [Setting]
        [DefaultValue(CDUseType.COOLDOWN)]
        [Category("MANA REGENERATION")]
        [DisplayName("Use Pet on")]
        [Description("Chose when use your Pet")]
        public CDUseType CDUsePet { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("MANA MANAGEMENT")]
        [DisplayName("TrySaveMana")]
        [Description("Try save mana: interrupt no needed heal")]
        public bool TrySaveMana { get; set; }

        [Setting]
        [DefaultValue(100)]
        [Category("TANK")]
        [DisplayName("PW: Shield on Tank hp%")]
        [Description("Cast PW: Shield on Tank at % hp set to 100 for always up shield on tank")]
        public int TankShieldPercent { get; set; }

        [Setting]
        [DefaultValue(55)]
        [Category("SHIELDS")]
        [DisplayName("PW: Shield hp%")]
        [Description("Cast PW: Shield on Player not Tank at % hp")]
        public int PWShieldPercent { get; set; }


        //NORMAL (NOT ATONEMENT) HEALING TUNING
        [Setting]
        [DefaultValue(80)]
        [Category("NORMAL (NOT ATONEMENT) HEAL TUNING")]
        [DisplayName("Penance hp%")]
        [Description("Cast Penance at AttackTarget % hp")]
        public int NoAtonementPenancePercent { get; set; }

        [Setting]
        [DefaultValue(50)]
        [Category("NORMAL (NOT ATONEMENT) HEAL TUNING")]
        [DisplayName("Heal hp%")]
        [Description("Cast Heal at AttackTarget % hp")]
        public int NoAtonementHealPercent { get; set; }

        [Setting]
        [DefaultValue(30)]
        [Category("NORMAL (NOT ATONEMENT) HEAL TUNING")]
        [DisplayName("Flash Heal hp%")]
        [Description("Cast Flash Heal at AttackTarget % hp")]
        public int NoAtonementFlashHealPercent { get; set; }

        [Setting]
        [DefaultValue(80)]
        [Category("NORMAL (NOT ATONEMENT) HEAL TUNING")]
        [DisplayName("Surge of Ligth %hp")]
        [Description("Cast Surge of Ligth if player hp < %. SoL will cast on lower hp player same if buff ending")]
        public int NoAtonementSoLPercent { get; set; }

        [Setting]
        [DefaultValue(40)]
        [Category("NORMAL (NOT ATONEMENT) HEAL TUNING")]
        [DisplayName("Desperate Prayer hp%")]
        [Description("Cast Desperate Prayer if we lower than % hp")]
        public int NoAtonementDesperatePrayerPercent { get; set; }

        //ATONEMENT HEALING TUNING
        [Setting]
        [DefaultValue(50)]
        [Category("ATONEMENT HEAL TUNING")]
        [DisplayName("Penance hp%")]
        [Description("Cast Penance at AttackTarget % hp")]
        public int AtonementPenancePercent { get; set; }

        [Setting]
        [DefaultValue(0)]
        [Category("ATONEMENT HEAL TUNING")]
        [DisplayName("Heal hp%")]
        [Description("Cast Heal at AttackTarget % hp")]
        public int AtonementHealPercent { get; set; }

        [Setting]
        [DefaultValue(30)]
        [Category("ATONEMENT HEAL TUNING")]
        [DisplayName("Flash Heal hp%")]
        [Description("Cast Flash Heal at AttackTarget % hp")]
        public int AtonementFlashHealPercent { get; set; }

        [Setting]
        [DefaultValue(80)]
        [Category("ATONEMENT HEAL TUNING")]
        [DisplayName("Surge of Ligth %hp")]
        [Description("Cast Surge of Ligth if player hp < %. SoL will cast on lower hp player same if buff ending")]
        public int AtonementSoLPercent { get; set; }

        [Setting]
        [DefaultValue(40)]
        [Category("ATONEMENT HEAL TUNING")]
        [DisplayName("Desperate Prayer hp%")]
        [Description("Cast Desperate Prayer if we lower than % hp")]
        public int AtonementDesperatePrayerPercent { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("DAMAGE REDUCTION")]
        [DisplayName("Auto use PW: Barrier")]
        [Description("enable automatic use of PW: Barrier")]
        public bool AutoUsePWBarrier { get; set; }

        [Setting]
        [DefaultValue(60)]
        [Category("DAMAGE REDUCTION")]
        [DisplayName("PW: Barrier hp%")]
        [Description("Cast PW: Barrier if Player below %h >= #PWBarrierNumber")]
        public int PWBarrierPercent { get; set; }

        [Setting]
        [DefaultValue(6)]
        [Category("DAMAGE REDUCTION")]
        [DisplayName("PW: Barrier players number")]
        [Description("Cast PW: Barrier if Player below PWBarrierPercent >= this number")]
        public int PWBarrierNumber { get; set; }

        [Setting]
        [DefaultValue(70)]
        [Category("CD")]
        [DisplayName("Power Infusion hp%")]
        [Description("Cast Power Infusion to empower healing if number of player lower than %hp >= PowerInfusionNumber")]
        public int PowerInfusionPercent { get; set; }

        [Setting]
        [DefaultValue(3)]
        [Category("CD")]
        [DisplayName("Power Infusion players number")]
        [Description("Cast Power Infusion to empower healing if number of player lower than PowerInfusionPercent hp% >= this value")]
        public int PowerInfusionNumber { get; set; }

        [Setting]
        [DefaultValue(60)]
        [Category("CD")]
        [DisplayName("Power Infusion mana%")]
        [Description("Cast Power Infusion to lower mana cost spell if our mana is lower than this value")]
        public int PowerInfusionManaPercent { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("SOS")]
        [DisplayName("use SoS routine")]
        [Description("Interrupt any other spell cast (except SpiritShell) if anyone lower than SoS heal % hp")]
        public bool SoSEnabled { get; set; }

        [Setting]
        [DefaultValue(40)]
        [Category("SOS")]
        [DisplayName("SoS hp%")]
        [Description("Cast SoS heal if anyone in party lower than % hp")]
        public int SoSPercent { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("AOE")]
        [DisplayName("DisableAOE_HealingRotation")]
        [Description("Enable/disable AOE healing")]
        public bool DisableAOE_HealingRotation { get; set; }

        [Setting]
        [DefaultValue(60)]
        [Category("PRAYER OF HEALING")]
        [DisplayName("Prayer Of healing hp%")]
        [Description("Cast Prayer Of Healing if player lower than % hp >= PrayerOfHealingNumber")]
        public int PrayerOfHealingPercent { get; set; }

        [Setting]
        [DefaultValue(4)]
        [Category("PRAYER OF HEALING")]
        [DisplayName("Prayer Of healing players number")]
        [Description("Cast Prayer Of Healing if player lower than PrayerOfHealingPercent >= this value")]
        public int PrayerOfHealingNumber { get; set; }

        [Setting]
        [DefaultValue(90)]
        [Category("PRAYER OF HEALING")]
        [DisplayName("T17PrayerOfHealing HP%")]
        [Description("When T17 4P BONUS (Clear Thoughts) proc: Cast Prayer Of Healing if player lower than % hp >= T17PrayerOfHealingPlayersNumber")]
        public int T17PrayerOfHealingPercent { get; set; }

        [Setting]
        [DefaultValue(3)]
        [Category("PRAYER OF HEALING")]
        [DisplayName("T17PrayerOfHealingPlayersNumber")]
        [Description("When T17 4P BONUS (Clear Thoughts) proc: Cast Prayer Of Healing if player lower than T17PrayerOfHealing HP% >= this value")]
        public int T17PrayerOfHealingNumber { get; set; }

        [Setting]
        [DefaultValue(90)]
        [Category("PRAYER OF HEALING")]
        [DisplayName("EmpoweredArchangelPrayerOfHealing HP%")]
        [Description("When Archangel 100% crit proc: Cast Prayer Of Healing if player lower than % hp >= ArchangelPrayerOfHealingPlayersNumber")]
        public int ArchangelPrayerOfHealingPercent { get; set; }

        [Setting]
        [DefaultValue(3)]
        [Category("PRAYER OF HEALING")]
        [DisplayName("EmpoweredArchangelPrayerOfHealingPlayersNumber")]
        [Description("When Archangel 100% crit proc: Cast Prayer Of Healing if player lower than ArchangelPrayerOfHealing HP% >= this value")]
        public int ArchangelPrayerOfHealingNumber { get; set; }
        
        [Setting]
        [DefaultValue(true)]
        [Category("PRAYER OF HEALING")]
        [DisplayName("Always cast PoH if both T17 and Empowered Archangel proc")]
        [Description("When Archangel 100% crit and T17 proc together Always cast Prayer Of Healing (but at least to 3 players)")]
        public bool POH_always_with_T17_and_Archangel { get; set; }
        

        [Setting]
        [DefaultValue(90)]
        [Category("AOE HEALING")]
        [DisplayName("HolyNova hp%")]
        [Description("Cast HolyNova if player lower than % hp >= HolyNovaNumber")]
        public int HolyNovaPercent { get; set; }

        [Setting]
        [DefaultValue(2)]
        [Category("AOE HEALING")]
        [DisplayName("HolyNova players number")]
        [Description("Cast HolyNova if player lower than HolyNovaPercent >= this value")]
        public int HolyNovaNumber { get; set; }

        [Setting]
        [DefaultValue(2)]
        [Category("AOE HEALING")]
        [DisplayName("HolyNova Enemies number")]
        [Description("Cast HolyNova if player near this enemies number")]
        public int HolyNovaEnemiesNumber { get; set; }

        [Setting]
        [DefaultValue(85)]
        [Category("AOE HEALING")]
        [DisplayName("Cascade/Halo/DivineStar %hp")]
        [Description("Cast Cascade/Halo/DivineStar if player lower than % hp >= CascadeHaloDivineStarNumber")]      
        public int CascadeHaloDivinestarPercent { get; set; }

        [Setting]
        [DefaultValue(2)]
        [Category("AOE HEALING")]
        [DisplayName("Cascade/halo/DivineStar players number")]
        [Description("Cast Cascade/halo/DivineStar if player lower than CascadeHaloDivinestarPercent >= this value")]
        public int CascadeHaloDivineStarNumber { get; set; }

        [Setting]
        [DefaultValue(20)]
        [Category("REST")]
        [DisplayName("Drink mana%")]
        [Description("Drink at % mana")]
        public int ManaPercent { get; set; }

        [Setting]
        [DefaultValue(0)]
        [Category("REST")]
        [DisplayName("Eat hp%")]
        [Description("Eat at % hp")]
        public int HealthPercent { get; set; }

        [Setting]
        [DefaultValue(100)]
        [Category("ROTATION")]
        [DisplayName("Atonement hp%")]
        [Description("Start Atonement healing only if someone on group has hp% < this value")]
        public int AtonementHp { get; set; }

        [Setting]
        [DefaultValue(10)]
        [Category("ROTATION")]
        [DisplayName("Atonement Mana Threshold")]
        [Description("Cast Smite,Penance and Holy Fire to heal if mana bigger than this value. If you dont want atonement set this value to 100")]
        public int AtonementManaThreshold { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("ROTATION")]
        [DisplayName("use Penance in dps")]
        [Description("use penance in dps rotation end in atonement rotation")]
        public bool UsePenanceInDPS { get; set; }

        [Setting]
        [DefaultValue(100)]
        [Category("OFF_TANK")]
        [DisplayName("PW: Shield on OffTank hp%")]
        [Description("Cast PW: Shield on OffTank at % hp set to 100 for always up shield on tank")]
        public int OffTankShieldPercent { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("CC")]
        [DisplayName("UsePsychicScream")]
        [Description("Use Psychic scream if enemy in range")]
        public bool UsePsychicScream { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("CC")]
        [DisplayName("Do not Attack CrowdControlled enemy")]
        [Description("Do not Attack CrowdControlled enemy NB: may slow performance!")]
        public bool AvoidCC { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("CC")]
        [DisplayName("UseVoidTendrils")]
        [Description("Use Void Tendrils if enemy in range")]
        public bool UseVoidTendrils { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("CC")]
        [DisplayName("UsePsyfiend")]
        [Description("Use Psyfiend if enemy in range")]
        public bool UsePsyfiend { get; set; }
       
        [Setting]
        [DefaultValue(false)]
        [Category("DISPELL")]
        [DisplayName("UseDispellMagic")]
        [Description("Use DispellMagic on current AttackTarget")]
        public bool UseDispellMagic { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("MULTIDOT")]
        [DisplayName("Use SW: Pain")]
        [Description("Use SW: Pain in PVP rotation")]
        public bool UseSWP { get; set; }

        [Setting, DefaultValue(Keys.None)]
        [Category("HOTKEY")]
        [DisplayName("PauseKey")]
        [Description("enable/disable Routine")]
        public Keys PauseKey { get; set; }

        [Setting, DefaultValue(Keys.None)]
        [Category("HOTKEY")]
        [DisplayName("PrecombatHotkey")]
        [Description("start a 60 sec procedure of shielding and PoM mainly tanks")]
        public Keys PrecombatHotkey { get; set; }
        

        [Setting, DefaultValue(Keys.None)]
        [Category("HOTKEY")]
        [DisplayName("UseDisciplineAtonementHealingRotationKey")]
        [Description("enable/disable AtonementHealingRotation")]
        public Keys UseDisciplineAtonementHealingRotationKey { get; set; }

        [Setting, DefaultValue(Keys.None)]
        [Category("HOTKEY")]
        [DisplayName("BarrierOnHotkey")]
        [Description("Cast Barrier On mouse position")]
        public Keys BarrierOnHotkey { get; set; }

        [Setting, DefaultValue(Keys.None)]
        [Category("HOTKEY")]
        [DisplayName("Blanket_PWS_Hotkey")]
        [Description("Will spam PwS : only if no SOS heal needed and no tank/offTank heal needed!!")]
        public Keys Blanket_PWS_Hotkey { get; set; }

        [Setting, DefaultValue(Keys.None)]
        [Category("HOTKEY")]
        [DisplayName("MassDispellOnHotkey")]
        [Description("Cast Mass Dispell On mouse position")]
        public Keys MassDispellOnHotkey { get; set; }

        [Setting, DefaultValue(Keys.None)]
        [Category("HOTKEY")]
        [DisplayName("Change_NPC_Healing_Hotkey")]
        [Description("Enable/Disable NPC Healing")]
        public Keys Change_NPC_Healing_Hotkey { get; set; }

        [Setting, DefaultValue(Keys.None)]
        [Category("HOTKEY")]
        [DisplayName("TargetSelective_PWS_Hotkey")]
        [Description("Enable/Disable TargettedSelectivePW_Shield option")]
        public Keys Selective_PWS_Hotkey { get; set; }
        

        [Setting]
        [DefaultValue(false)]
        [Category("SELECTIVE SHIELD")]
        [DisplayName("Targetted player Group Selective PW:Shield")]
        [Description("If enable CR will Shield ONLY GRP of targetted player: if I select a player of GRP1 then CR will shield ONLY GRP1 player. "+
            "SoS healing and no raid member selection will avoid this mechanic. Last grp selected remains until another one will be selected. "+
            "If no grp is selected then will be choosen self grp")]
        public bool TargettedSelectivePW_Shield { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("SELECTIVE SHIELD")]
        [DisplayName("Priorize Selective PW:Shield")]
        [Description("If selective shield is enabled , enabling this will priorize shield spam over other spell")]
        public bool PriorizedTargettedSelectivePW_Shield { get; set; }

        /*[Setting]
        [DefaultValue(false)]
        [Category("SELECTIVE SHIELD")]
        [DisplayName("Targetted player Group Selective SPIRIT SHELL")]
        [Description("If enable and spiritShell talent selected and cast CR will try to cast PoH ONLY GRP of targetted player: if I select a player of GRP1 then CR will shield ONLY GRP1 player. " +
            "SoS healing and no raid member selection will avoid this mechanic. Last grp selected remains until another one will be selected. " +
            "If no grp is selected then will be choosen self grp")]
        public bool TargettedSelectiveSpiritShell { get; set; }*/

        

    }
}